1 // Простейшее приложение Qt4 (пустое окно) 2 3 #include <QApplication> 4 #include <QMainWindow> 5 6 int main(int argc, char *argv[]) { 7 8 QApplication app(argc, argv); 9 10 QMainWindow *mw = new QMainWindow(0, Qt::Window); 11 mw->setWindowTitle("Hello Qt4"); 12 mw->resize(400, 300); 13 mw->show(); 14 15 return app.exec(); 16 }Пояснения к программе:
QApplication (приложение) и
QMainWindow (главное окно).
main с аргументами командной строки.
QApplication
(приложение), передав конструктору параметры командной строки, которые,
возможно, указаны при запуске программы (argc -- число
параметров, argv -- указатель на массив строковых значений).
Qt::Windows означает, что элемент будет выглядеть, как
окно приложения, т.е. будет иметь строку заголовка с системными кнопками для
сворачивания на панель задач, закрытия и т.д.).
Перед компиляцией программы надо сначала создать проект Qt (файл с
расширением .pro), для этого требуется войти в тот каталог, в котором
находится cpp-файл с исходным текстом, и запустить утилиту qmake с
параметром -project. Имя cpp-файла можно не указывать. По умолчанию
имя файла проекта будет совпадать с названием каталога, в котором происходит
сборка программы. Для задания другого имени pro-файла при вызове qmake
надо указать параметр -o. Например, для нашего первого проекта
будет создан файл 00.pro следующего содержания:
TEMPLATE = app TARGET = 00 DEPENDPATH += . INCLUDEPATH += . # Input SOURCES += 00.cppПосле создания pro-файла можно сгенерировать make-файл, для чего достаточно запустить утилиту qmake ещё раз, но уже без указания каких-либо ключей (или задать параметр
-makefile ФайлПроекта.pro). Только после этого можно начинать
компиляцию с помощью обычной команды mingw32-make (в случае использования
компилятора MinGW), nmake (для Microsoft~C++), make (для g++ в
Linux) и т.п. При этом можно явно указать имя make-файла, для этого все
перечисленные компиляторы распознают ключ -f. Поскольку в процессе
разработки программу приходится много раз перекомпилировать, вышеописанный
процесс лучше всего проводить с помощью командного файла build.cmd.
Например, в системе Windows: 1 qmake -project -o 00.pro 00.cpp 2 qmake -makefile 00.pro 3 4 rem mingw32-make -f Makefile.Debug 5 mingw32-make -f Makefile.Release 6 7 pause
Теперь, как и обещали, обсудим вопрос о символах кириллицы. Библиотека Qt
предлагает несколько решений для национальных алфавитов, отличных от стандартной
латиницы. Первый вариант -- использовать функцию
QString::fromLocal8Bit. Дело в том, что для работы со строковыми
значениями в Qt имеется класс QString, который оперирует
двухбайтными символами Unicode. Для преобразования обычных строк с однобайтными
символами к типу QString как раз и предназначен метод
fromLocal8Bit. При этом используется системная кодировка (в Windows
--- cp1251, в Linux -- обычно koi8-r).
Недостаток данного варианта заключается в том, что если программа, например, разрабатывалась в системе Windows, а затем мы захотели скомпилировать её исходные тексты в Linux, где используется другая кодовая таблица для символов кириллицы, то предварительно придётся осуществить перекодировку исходных текстов, иначе после компиляции все русские сообщения окажутся нечитаемыми.
Изменённый текст нашей первой программы приведён в листинге 2, а внешний вид окна в системе Linux для двух разных тем рабочего стола показан на рис.
1 // Простейшее приложение Qt4 (пустой фрейм) 2 // Вариант с кириллицей в заголовке 3 4 #include <QApplication> 5 #include <QMainWindow> 6 7 int main(int argc, char *argv[]) { 8 9 QApplication app(argc, argv); 10 11 QMainWindow *mw = new QMainWindow(0, Qt::Window); 12 mw->setWindowTitle(QString::fromLocal8Bit("Пустое окно Qt4")); 13 mw->resize(400, 300); 14 mw->show(); 15 16 return app.exec(); 17 }
Второй вариант работы с символами кириллицы -- явное использование
кодеков (специальных объектов для перекодировки строк). Соответствующий
класс QTextCodec определён в заголовочном файле с тем же именем
(без расширения! Заголовочные файлы с расширением .h используются
только в старых проектах Qt3). При создании кодека надо указать название
используемой кодовой таблицы, например:
QTextCodec *codec = QTextCodec::codecForName("CP1251");
Затем надо связать этот кодек со всеми строками C++: QTextCodec::setCodecForCStrings(codec);Поскольку при создании кодека указана конкретная кодовая таблица, то исход компиляции исходных текстов не зависит от системной кодировки той платформы, на которой производится сборка программы: результат будет везде одним и тем же. Но файлы с исходными текстами программ в этом случае нельзя подвергать перекодировке (или после перекодировки требуется изменить название кодовой таблицы, заданной при создании кодека). В листинге 3 приведён новый вариант нашей программы.
1 // Простейшее приложение Qt4 (пустой фрейм) 2 // Кодеки 3 4 #include <QApplication> 5 #include <QMainWindow> 6 #include <QTextCodec> 7 8 int main(int argc, char *argv[]) { 9 10 QApplication app(argc, argv); 11 12 QTextCodec *codec = QTextCodec::codecForName("CP1251"); 13 QTextCodec::setCodecForCStrings(codec); 14 15 QMainWindow *mw = new QMainWindow(0, Qt::Window); 16 mw->setWindowTitle("Пустое окно Qt4"); 17 mw->resize(400, 300); 18 mw->show(); 19 20 return app.exec(); 21 }Наконец, третий (наиболее предпочтительный) метод работы с символами национальных алфавитов связан с использованием специальной функции перевода
tr, с помощью которой осуществляется интернационализация
приложений. Подробнее этот вопрос мы обсудим позже, а пока договоримся все
строковые константы, указанные в тексте программы, передавать в качестве
параметра функции tr. Эта статическая функция является членом всех
классов Qt, порождённых от базового класса QObject, но если, как
сейчас, мы собираемся вызвать её в главной программе, а не в каком-либо методе
класса, то приходится указывать какой-нибудь подходящий объект, например,
QObject::tr. Для указания кодировки, используемой функцией
перевода, надо создать соответствующий кодек и передать его в качестве аргумента
методу setCodecForTr. Окончательный вариант нашей программы показан
в листинге 4.
1 // Простейшее приложение Qt4 (пустой фрейм) 2 // Кодеки и функция tr() 3 4 #include <QApplication> 5 #include <QMainWindow> 6 #include <QTextCodec> 7 8 int main(int argc, char *argv[]) { 9 10 QApplication app(argc, argv); 11 12 QTextCodec *codec = QTextCodec::codecForName("CP1251"); 13 QTextCodec::setCodecForTr(codec); 14 15 QMainWindow *mw = new QMainWindow(0, Qt::Window); 16 mw->setWindowTitle(QMainWindow::tr("Пустое окно Qt4")); 17 18 mw->resize(400, 300); 19 mw->show(); 20 21 return app.exec(); 22 }Назад Содержание Вперед